#include <linux/kernel.h>
#include <linux/init.h>     /* module_init module_exit */
#include <linux/module.h>   /* MODULE_LICENSE */

/**
  * @brief  模块入口函数
  * @note   
  * @param  
  * @retval 
  */
int __init myhello_init(void)
{
	printk("+++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
  printk("my test module is running!\n");
	printk("+++++++++++++++++++++++++++++++++++++++++++++++++++++\n");

  printk(KERN_EMERG"KERN_EMERG:%s\r\n", KERN_EMERG);
  printk(KERN_ALERT"KERN_ALERT:%s\r\n", KERN_ALERT);
  printk(KERN_CRIT"KERN_CRIT:%s\r\n", KERN_CRIT);
  printk(KERN_ERR"KERN_ERR:%s\r\n", KERN_ERR);
  printk(KERN_WARNING"KERN_WARNING:%s\r\n", KERN_WARNING);
  printk(KERN_NOTICE"KERN_NOTICE:%s\r\n", KERN_NOTICE);
  printk(KERN_INFO"KERN_INFO:%s\r\n", KERN_INFO);
  printk(KERN_DEBUG"KERN_DEBUG:%s\r\n", KERN_DEBUG);
	return 0;
}

/**
  * @brief  模块出口函数
  * @note   
  * @param  
  * @retval 
  */
void __exit myhello_exit(void)
{
	printk("myhello will exit\n");
}

/**
  * @brief  将__init定义的函数指定为驱动的入口函数
  * @note   
  * @param  
  * @retval 
  */
module_init(myhello_init);

/**
  * @brief  将__exit定义的函数指定为驱动的出口函数
  * @note   
  * @param  
  * @retval 
  */
module_exit(myhello_exit);

/* 模块信息(通过 modinfo myhello 查看) */
MODULE_LICENSE("GPL");               /* 源码的许可证协议 */
MODULE_AUTHOR("ssq");            /* 字符串常量内容为模块作者说明 */
MODULE_DESCRIPTION("Description");   /* 字符串常量内容为模块功能说明 */
MODULE_ALIAS("module's other name"); /* 字符串常量内容为模块别名 */
